package de.herzog.bbp.view;

import java.util.Date;

import javafx.util.StringConverter;
import de.herzog.bbp.model.Halle;
import de.herzog.bbp.model.Klasse;
import de.herzog.bbp.model.Mannschaft;
import de.herzog.bbp.model.dao.HalleDAO;
import de.herzog.bbp.model.dao.KlasseDAO;
import de.herzog.bbp.model.dao.MannschaftDAO;
import de.herzog.bbp.view.bean.SpielBean;
import de.herzog.bbp.view.javafx.AbstractStringConverter;

public abstract class SpielBeanConverter {

	public static final StringConverter<String> STRING_CONVERTER = new StringConverter<String>() {
		@Override
		public String toString(String object) {
			return object == null ? "" : object;
		}

		@Override
		public String fromString(String string) {
			return string;
		}
	};

	public static final AbstractStringConverter<SpielBean, Klasse> KLASSE_CONVERTER = new AbstractStringConverter<SpielBean, Klasse>() {
		public String toString(Klasse klasse) {
			return klasse == null ? "" : klasse.getName();
		}

		public Klasse fromString(String string) {
			return KlasseDAO.getByName(string);
		}
	};

	public static final AbstractStringConverter<SpielBean, Mannschaft> MANNSCHAFT_CONVERTER = new AbstractStringConverter<SpielBean, Mannschaft>() {
		public String toString(Mannschaft mannschaft) {
			return mannschaft == null ? "" : mannschaft.getVerein().getName() + mannschaft.getNummer();
		}

		public Mannschaft fromString(String string) {
			Klasse klasse = getRowBean().klasseProperty().get();
			if (string.length() >= 5) {
				String verein = string.substring(0, 4);
				String nummer = string.substring(4);
				return MannschaftDAO.getByKlasseVereinNummer(klasse.getName(), verein, nummer);
			} else {
				return null;
			}
		}
	};

	public static final AbstractStringConverter<SpielBean, Date> DATE_CONVERTER = new AbstractStringConverter<SpielBean, Date>() {
		public String toString(Date date) {
			return SpielBean.dateToString(date);
		}

		public Date fromString(String string) {
			return SpielBean.stringToDate(string);
		}
	};

	public static final AbstractStringConverter<SpielBean, Halle> HALLE_CONVERTER = new AbstractStringConverter<SpielBean, Halle>() {
		public String toString(Halle halle) {
			return halle == null ? "" : halle.getNummer().toString();
		}

		public Halle fromString(String string) {
			Mannschaft heim = getRowBean().heimProperty().get();
			return HalleDAO.getByVereinAndNummer(heim.getVerein(), new Integer(string));
		}
	};
}
